#ifndef _PCRESOURCE_GUI_H_
#define _PCRESOURCE_GUI_H_

#ifdef __cplusplus
extern "C"
{
#endif

#include "lvgl.h"

    // PC硬件资源信息，带一位小数的数据均为扩大10倍厚的整数部分
    typedef struct _pc_res_info
    {
        int cpu_usage; // CPU利用率(%)
        int cpu_temp;  // CPU温度(C)
        int cpu_freq;  // CPU主频(MHz)
        int cpu_power; // CPU功耗(W)，扩大10倍

        int gpu_usage; // GPU利用率(%)
        int gpu_temp;  // GPU温度(C)
        int gpu_power; // GPU功耗(W)，扩大10倍
        int gpu_freq;  // GPU核心频率

        int ram_usage; // RAM使用率(%)
        int ram_used;  // RAM使用量(MB)

        int net_upload_speed;   // 网络上行速率(KB/s)，扩大10倍
        int net_download_speed; // 网络下行速率(KB/s)，扩大10倍

        int gpu_ram_used;  // GPU内存使用量(MB)
        int gpu_ram_usage; // GPU内存使用率

        int disk_temp;  // 硬盘温度(C)
        int disk_usage; // 硬盘使用率(%)

        int cpu_fan_speed; // CPU风扇转速(RPM)
        int gpu_fan_speed; // GPU风扇转速(RPM)

        int min;  // 系统时间: 分
        int hour; // 系统时间: 时

        int date;  // 系统日期: 日
        int month; // 系统日期: 月
        int year;  // 系统日期: 年

        char cpu_name[64]; // CPU型号
        char gpu_name[64]; // GPU型号
    } PCResInfo;

    // 主题操作函数集合
    typedef struct _gui_theme_operations
    {
        void (*init)(lv_obj_t *parent);
        void (*update)(PCResInfo *info);
        void (*release)(void);
    } gui_theme_operations;

    void chart_auto_scale(lv_obj_t *chart, lv_chart_series_t *series, int min, int max);
    void chart_draw_evnet_cb(lv_event_t *e);

#ifdef __cplusplus
}
#endif

#ifdef __cplusplus

#include <functional>

namespace PCResourceUI
{
    using ExitCb = std::function<void(void)>;
    using ShowNextThemeCb = std::function<void(void)>;

    struct Operations
    {
        ExitCb exitCb;      // 退出程序回调函数
        ShowNextThemeCb showNextTheme;    // 显示下一个主题回调函数
    };

    void create(Operations &opts);
    void update(PCResInfo &info);
    void release(void);
};

#endif

#endif
